package com.bid.base.common.responseV2;

import lombok.Getter;
import lombok.Setter;

/**
 * 返回消息Json数据
 *
 * @author alanyuan
 *
 */
@Getter@Setter
public class ApiResultCoder<E> {

	public static String MSG_SUCC = "成功";
	public static String MSG_FAIL = "失败";

	private String msg;
	private int status;
	/**
	 * 数据
	 */
	private E data;
	/**
	 * 响应者/ 接口作者/或者负责人
	 */
	private Author author;


	// add responder start
	public static final ApiResultCoder success(Object data, Author author) {
		ApiResultCoder res = new ApiResultCoder();
		res.data = data;
		res.msg = "成功";
		res.author = author;
		return res;
	}
	public static final ApiResultCoder error(Object data, Author author) {
		ApiResultCoder res = new ApiResultCoder();
		res.data = data;
		res.msg = "失败";
		res.author = author;
		return res;
	}
	public ApiResultCoder(int status, String msg, Author author) {
		status = status;
		msg = msg;
		this.author = author;
	}

	public ApiResultCoder(int status, String msg, E data, Author author) {
		status = status;
		msg = msg;
		data = data;
		this.author = author;
	}
	//add responder end


	public ApiResultCoder() {
		status = ErrorCode.SUCCESS.getStatus();
		msg = "";
	}

	public ApiResultCoder(int status, String msg) {
		status = status;
		msg = msg;
	}

	public ApiResultCoder(int status, String msg, E data) {
		status = status;
		msg = msg;
		data = data;
	}


	public static final ApiResultCoder success(Object data) {
		ApiResultCoder res = new ApiResultCoder();
		res.data = data;
		res.msg = "成功";
		return res;
	}

	public static final ApiResultCoder error(Object data) {
		ApiResultCoder res = new ApiResultCoder();
		res.data = data;
		res.msg = "失败";
		return res;
	}

	/**
	 * 服务端出错时的返回内容
	 *
	 * @param msg 错误描述
	 * @return
	 */
	public static final ApiResultCoder error(String msg) {
		ApiResultCoder res = new ApiResultCoder();
		res.setStatus(ErrorCode.ERROR.getStatus());
		res.setMsg(msg);
		return res;
	}

	public static final ApiResultCoder error(String msg, Object data) {
		ApiResultCoder res = new ApiResultCoder();
		res.setStatus(ErrorCode.ERROR.getStatus());
		res.setMsg(msg);
		res.setData(data);
		return res;
	}

	public static final ApiResultCoder error(ErrorCode errorCode) {
		ApiResultCoder res = new ApiResultCoder();
		res.setStatus(errorCode.getStatus());
		res.setMsg(errorCode.getMsg());
		return res;
	}

	public static final ApiResultCoder error(int errorCode, String msg) {
		ApiResultCoder res = new ApiResultCoder();
		res.setStatus(errorCode);
		res.setMsg(msg);
		return res;
	}


	@Override
	public String toString() {
		return "{\"status\":" + this.status + "\",\"msg\":\"" + this.msg + "\",\"data\":" + data + "}";
	}

	public static final ApiResultCoder paramError(String... obj) {
		ApiResultCoder res = new ApiResultCoder();
		res.setMsg((obj != null && obj.length >= 1) ? (obj[0].toString()) : "参数异常");
		res.setStatus(ErrorCode.PARAM_ERROR.getStatus());
		return res;
	}

	public static final ApiResultCoder noLogin(String... obj) {
		ApiResultCoder res = new ApiResultCoder();
		res.setMsg((obj != null && obj.length >= 1) ? (obj[0].toString()) : "请登录");//登陆超时或未登陆
		res.setStatus(ErrorCode.NO_LOGIN_TIME_OUT.getStatus());
		return res;
	}
//	public static final ApiResult paramError(String msg) {
//		ApiResult res = new ApiResult();
//		res.setMsg(msg);
//		res.setStatus(ErrorCode.PARAM_ERROR.getStatus());
//		return res;
//	}
}
